// 处理的请求的配置
import http from 'wechat-http'
// 基础地址
http.baseURL = 'https://live-api.itheima.net'

// 请求拦截器
http.intercept.request = function (option) {
  const app = getApp()
  const token = app.token

  const defaultHeader = {
    Authorization: `Bearer ${token}`,
  }

  option.header = Object.assign({}, defaultHeader, option.header)

  // 请求拦截器里面进行token的统一注入
  return option
}

// 配置响应拦截器
http.intercept.response = async function (response) {
  const app = getApp()
  // 判断当前请求出现了401，证明token过期了，判断是否有refreshtoken,如果有的情况下,用refresh换区access
  // console.log(response)
  if (response.statusCode === 401) {
    // 一个是请求正常的接口【token】，一个是换token的时候
    if (response.config.url.includes('/refreshToken')) {
      // 当前失效的请求是在换token，证明refreshToken就失效了，跳登录
      wx.redirectTo({
        url: '/pages/login/index',
      })
      return
    }
    const res = await http({
      method: 'POST',
      url: '/refreshToken',
      header: {
        Authorization: 'Bearer ' + app.refreshToken,
      },
    })
    // 检测接口是否调用成功
    if (res.code !== 10000) return wx.utils.toast('更新token失败!')
    // 新的token存储到本地[应用实例]
    app.setToken('token', res.data.token)
    app.setToken('refreshToken', res.data.refreshToken)

    // 替换掉当前这次请求的Authorization,替换为换去得到的新token
    response.config = Object.assign(response.config, {
      //
      header: {
        Authorization: 'Bearer ' + res.data.token, // 替换为新token
      },
    })
    // 修改之后的config,把当前这次请求发完
    return http(response.config)
  }
  return response.data
}

// 需要导出或者挂载wx上才可使用
wx.http = http

export default http
